<?php

class AccionesController extends CustomController
{

    public function listar()
    {
        // Check if user is logged in
        $this->userLoggedIn();
        $this->isSecurity();
        // Get page and list
        $pageNumber = $this->getPage();
        $acciones = $this->model->getPaginatedAcciones($pageNumber);
        $vars = array(
            'permiso_online'  => STATUS_ONLINE,
            'cambiar_link'    => $this->link(MODULE_ACCIONES, MODULE_ACCIONES_CAMBIAR_VISIBILIDAD),
            'pagination_link' => $this->link(MODULE_ACCIONES, MODULE_ACCIONES_LISTAR_ACCIONES),
            'acciones'        => $acciones
        );
        $this->view->listarAcciones($vars);
    }

    public function porUsuario()
    {
        // Check if user is logged in
        $this->userLoggedIn();
        $this->isSecurity();
        // Get user
        $id = $this->getValue('id');
        if ($user = $this->model->getUsuario($id))
        {
            if (!empty($user['fkrol']))
            {
                $rol = $user['rol'];
                $vars = array(
                    'user'                 => $user,
                    'acciones_por_usuario' => $this->link(MODULE_ACCIONES, MODULE_ACCIONES_POR_USUARIO),
                    'acciones_sistema'     => $this->model->getAcciones(true),
                );
                // Post?
                if ($_POST)
                {
                    $postedUsuario = $this->getValue('usuario');
                    $permitidas = array();
                    $noPermitidas = array();
                    if (!empty($postedUsuario['acciones']))
                    {
                        // Permitidas
                        if (!empty($postedUsuario['acciones']['permitidas']))
                        {
                            foreach($postedUsuario['acciones']['permitidas'] as $permitida)
                            {
                                if (isset($vars['acciones_sistema'][$permitida]))
                                {
                                    $permitidas[]= $vars['acciones_sistema'][$permitida];
                                    unset($vars['acciones_sistema'][$permitida]);
                                }
                            }
                        }
                        // Permitidas
                        if (!empty($postedUsuario['acciones']['no_permitidas']))
                        {
                            foreach($postedUsuario['acciones']['no_permitidas'] as $noPermitida)
                            {
                                if (isset($vars['acciones_sistema'][$noPermitida]))
                                {
                                    $noPermitidas[]= $vars['acciones_sistema'][$noPermitida];
                                    unset($vars['acciones_sistema'][$noPermitida]);
                                }
                            }
                        }
                    }
                    $vars['acciones_rol_permitidas']    = $permitidas;
                    $vars['acciones_rol_no_permitidas'] = $noPermitidas;
                    // Acciones diferentes segun el rol?
                    $soloDelRol = $this->model->getAccionesDelRol($user['fkrol']);
                    $diferentes = array();
                    if (!empty($permitidas))
                    {
                        foreach ($permitidas as $accion)
                        {
                            if (!isset($soloDelRol['acciones']['permitidas'][$accion['idaccion']]))
                            {
                                $diferentes[$accion['idaccion']] = STATUS_ONLINE;
                            }
                        }
                    }
                    if (!empty($noPermitidas))
                    {
                        foreach ($noPermitidas as $accion)
                        {
                            if (!isset($soloDelRol['acciones']['no_permitidas'][$accion['idaccion']]))
                            {
                                $diferentes[$accion['idaccion']] = STATUS_OFFLINE;
                            }
                        }
                    }
                    if ($this->model->guardarAcciones($id, $diferentes))
                    {
                        $this->notice("Acciones asignadas con &eacute;xito!");
                        $this->redirectTo(MODULE_ROLES, MODULE_ROLES_POR_USUARIO);
                    }
                    else
                    {
                        $this->error("Error asignando acciones. Intente nuevamente");
                    }
                }
                else
                {
                    if (!empty($rol['acciones']['permitidas']))
                    {
                        foreach ($rol['acciones']['permitidas'] as $accion)
                        {
                            unset($vars['acciones_sistema'][$accion['idaccion']]);
                        }
                    }
                    if (!empty($rol['acciones']['no_permitidas']))
                    {
                        foreach ($rol['acciones']['no_permitidas'] as $accion)
                        {
                            unset($vars['acciones_sistema'][$accion['idaccion']]);
                        }
                    }
                    $vars['acciones_rol_permitidas']    = $rol['acciones']['permitidas'];
                    $vars['acciones_rol_no_permitidas'] = $rol['acciones']['no_permitidas'];
                    unset($rol['acciones']);
                }
                $vars['rol'] = $rol;
                $this->view->accionesPorUsuario($vars);
            }
            else
            {
                $this->error('El usuario ingresado no posee un rol asignado, por lo que no hay acciones por sobreescribir. Solo se podr&aacute;n asignar acciones a un usuario en particular, si este posee un rol que determine una visibilidad por default en las acciones del sistema.');
                $this->redirectTo(MODULE_ROLES, MODULE_ROLES_POR_USUARIO);
            }
        }
        else
        {
            $this->error('El usuario ingresado no es correcto');
            $this->redirectTo(MODULE_ROLES, MODULE_ROLES_POR_USUARIO);
        }
    }
    
    public function cambiarVisibilidad()
    {
        // Check if user is logged in
        $this->userLoggedIn(true);
        $this->isSecurity(true);
        // Levantar accion
        $id = $this->getValue('id');
        if ($permiso = $this->model->cambiarPermiso($id))
        {
            $this->jSon(array('res' => true, 'permiso' => $permiso['permiso_nuevo']));
        }
        else
        {
            $this->jSon(array('res' => 'err'));
        }
    }

}

?>